#include <iostream>
#include <future>
#include <chrono>
#include <thread>

int Add(int a, int b)
{
    return a + b;
}

int main()
{
    std::packaged_task<int(int, int)> pt(Add);
    std::future<int> fut = pt.get_future();

    // 可调用对象 != 函数
    // pt(1,2);
    // int ret = pt(1,2);

    // 1.
    // std::thread th(std::move(pt), 10, 0);
    // int sum = fut.get();
    // std::cout << "sum:" << sum << std::endl;
    // th.join();
    
    // 2.
    auto ptask = std::make_shared<std::packaged_task<int(int, int)>>(Add);
    std::future<int> fut1 = ptask->get_future();
    std::thread th([ptask](){
        (*ptask)(1,2);
    });
    th.join();

    int sum = fut1.get();
    std::cout << "sum:" << sum << std::endl;

    return 0;
}
